/**
 * 延时函数
 */
function timeout(time){
    return new Promise((resolve)=>{
        setTimeout(()=>{
            resolve();
        },time);
    });
}

class SuperTask{
    //构造函数，默认线程内只允许两个任务进行
    constructor(parentCount){
        this.parentCount=parentCount;//并发线程数
        this.runningCount=0;        //正在运行的线程数
        this.tasks=[];
    }
    add(task){
        return new Promise((resolve,reject)=>{
            this.tasks.push({task,resolve,reject})
            this.run()
        })
    }
    run(){
        while(this.runningCount<this.parentCount&&this.tasks.length){
            const {task,resolve,reject}=this.tasks.shift();
            this.runningCount++;
            task().then(resolve,reject).finally(()=>{
                this.runningCount--;
                this.run()
            })
        }
    }
}

const superTask=new SuperTask(2);

function addTask(time,name){
    superTask.add(()=>timeout(time)).then(()=>{console.log(`任务${name}完成`)})
}

addTask(1000,1);
addTask(2009,2);
addTask(1000,3);
addTask(1000,4);
addTask(1000,5);


var promise= new Promise((resolve,reject)=>{
    resolve('111111111');
})
promise.then(res=>{
    console.log(res)
}).finally(()=>{
    console.log(222222);
})


/**
 * 使用shift();循环遍历删除第一项数据，有bug会导致间接跳跃删除
 */
function test(){
    var arr=[1,2,3,4,5]
    // for (const item of arr) {
    //     console.log(item)
    //     arr.shift()
    // }
    while(arr[0]){
        console.log(arr[0])
        arr.shift()
    }
    console.log(arr)
}
// test();
